package ftdpc.bean;

import fdupc.entity.IEntityClass;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * 类描述:  任务属性描述
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2022/9/10 0010 下午 1:04
 */
@Data
@ToString
@Accessors(chain = true)
@EqualsAndHashCode(of = {"taskKey"})
public class TaskAttribute implements IEntityClass {

    private static final long serialVersionUID = 4543122014108906918L;
    /**
     * 属性描述：任务标识
     *
     * @date : 2022/9/10 0010 下午 1:05
     */
    private String taskKey;

    /**
     * 属性描述：任务名称
     *
     * @date : 2022/9/10 0010 下午 1:10
     */
    private String taskName;

    /**
     * 属性描述：开始时间
     *
     * @date : 2022/9/10 0010 下午 1:05
     */
    private Date startTime;

    /**
     * 属性描述：已经执行的次数
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private Long executeNum = 0L;

    /**
     * 属性描述：执行中发生的异常数
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private Long executeErrorNum = 0L;

    /**
     * 属性描述：最大执行次数
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private Long maxExecuteNumSize;

    /**
     * 属性描述：执行周期
     * <br />
     * Cron表达式
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private String executionCycleByCron;

    /**
     * 属性描述：执行间隔
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private Long executionCycleByInterval;

    /**
     * 属性描述：执行间隔单位
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private TimeUnit executionCycleByIntervalUnit;

    /**
     * 属性描述：是否有效
     * <br />
     * 0：无效；1：有效
     *
     * @date : 2022/9/10 0010 下午 1:12
     */
    private int taskIsItEffective = 0;

    /**
     * 属性描述：执行目标
     *
     * @date : 2022/9/10 0010 下午 1:17
     */
    private String taskExecutionTarget;

    /**
     * 属性描述：执行信息
     *
     * @date : 2022/9/10 0010 下午 1:17
     */
    private String taskExecutionMessage;

    /**
     * 属性描述：是否配置
     *
     * @date : 2022/9/10 0010 下午 1:17
     */
    private Boolean taskIsConfig = Boolean.FALSE;

    /**
     * 属性描述：是否自动运行
     *
     * @date : 2022/9/10 0010 下午 1:17
     */
    private Boolean taskIsAutoRun = Boolean.FALSE;

    /**
     * 属性描述：逻辑是否存在
     *
     * @date : 2022/9/10 0010 下午 1:17
     */
    private Boolean taskDoesTheLogicExist = Boolean.FALSE;

    /**
     * 功能描述：对象转换
     *
     * @date : 2022/9/10 0010 下午 6:43
     */
    public TaskAttribute putByTaskItem(TaskItem taskItem) {
        return this.setTaskKey(taskItem.getTaskKey()).setTaskName(taskItem.getTaskName())
                .setExecutionCycleByCron(taskItem.getExecutionCycleByCron())
                .setExecutionCycleByInterval(taskItem.getExecutionCycleByInterval())
                .setExecutionCycleByIntervalUnit(taskItem.getExecutionCycleByIntervalUnit())
                .setTaskExecutionTarget((taskItem.getTaskExecutionTarget() == null) ? "" : taskItem.getTaskExecutionTarget())
                .setMaxExecuteNumSize(taskItem.getMaxExecuteNumSize())
                .setTaskIsConfig(Boolean.TRUE)
                .setTaskIsAutoRun((taskItem.getTaskIsAutoRun() == null) ? Boolean.FALSE : taskItem.getTaskIsAutoRun());
    }

    /**
     * 功能描述：对象转换
     *
     * @date : 2022/9/10 0010 下午 6:43
     */
    public TaskItem toTaskItem() {
        return new TaskItem().setTaskKey(this.getTaskKey()).setTaskName(this.getTaskName())
                .setExecutionCycleByCron(this.getExecutionCycleByCron())
                .setExecutionCycleByInterval(this.getExecutionCycleByInterval())
                .setExecutionCycleByIntervalUnit(this.getExecutionCycleByIntervalUnit())
                .setTaskExecutionTarget(this.getTaskExecutionTarget()).setTaskIsAutoRun(this.getTaskIsAutoRun());
    }
}
